6 kyu
傳入一個數字 n 表示金字塔的階層。
金字塔以陣列形式來表示,如果 n = 3 金字塔:
[
" * ",
" *** ",
"*****"
]
function towerBuilder(nFloors) {
let space = "";
let result = [];
for (let i = 0, n = nFloors; i < n; i++) {
let quantity = 1 + (nFloors - 1) * 2;
let element = space + "*".repeat(quantity) + space;
space += " ";
result.unshift(element);
nFloors--;
}
return result;
}
space = "";
用來紀錄每一層金字塔前方的空格,result = [];
用來儲存建立好的金字塔的每一層。
使用 for
迴圈迭代每一層金字塔。
在每一層中,計算這一層星號的數量;1 + (nFloors - 1) * 2
是根據規律計算需要有多少 *
符號;然後利用 repeat 帶入算好的數量,建立一個表示這一層的元素。
也就是說,金字塔是由最底層開始建立的。按照規律,空格是由最後一層開始增加;星星則是從最後一層開始遞減,並且從頂層開始算起順序是 1、3、5。
在每一層迴圈完成後,更新 space
變數;將元素使用 unshift 方法加入 result,這是因為迴圈從底層計算,為了保持金字塔的形狀;nFloors--
縮小金字塔的層數,以便在下一輪迴圈計算下一層。
如果要說開始解程式題之後有什麼讓我覺得荒謬的,這類題型絕對是其中之一(›´ω`‹ )
我已經可以想見之後要用程式畫山水風景了。